package com.xr.system.common.config.multiRequestBodyConfig;

import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;

public class MultiHttpServletRequestWrapper extends HttpServletRequestWrapper {

	private byte[] body;

	/**
	 * 自定义参数
	 */
	public MultiHttpServletRequestWrapper(HttpServletRequest request, String body) {
		super(request);
		this.body = body == null ? new byte[0] : body.getBytes(StandardCharsets.UTF_8);
	}

	@Override
	public BufferedReader getReader() {
		return new BufferedReader(new InputStreamReader(getInputStream(), StandardCharsets.UTF_8));
	}

	@Override
	public ServletInputStream getInputStream() {
		if (body == null) {
			body = new byte[0];
		}
		ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body);
		return new ServletInputStream() {
			@Override
			public boolean isFinished() {
				return false;
			}

			@Override
			public boolean isReady() {
				return false;
			}

			@Override
			public void setReadListener(ReadListener readListener) {
			}

			@Override
			public int read() {
				return byteArrayInputStream.read();
			}
		};
	}

}
